package main

import (
	"fmt"
	"net"
)

type Server struct {
	Ip   string
	port int
}

// 操作符	用途	示例	结果
// &	取变量地址	x := 42; p := &x	p 是 *int 类型，值为 x 的地址
// *	声明指针类型	var p *int	p 是 *int 类型的空指针
// *	解引用（获取指针指向的值）	x := *p	x 是 int 类型，值为 p 指向的内容
func NewServer(ip string, port int) *Server {
	server := &Server{
		Ip:   ip,
		port: port,
	}

	return server
}

func (this *Server) Handler(conn net.Conn) {
	fmt.Println("成功建立链接")
}

func (this *Server) Start() {
	listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", this.Ip, this.port))
	if err != nil {
		fmt.Println("net.Listen err:", err)
		return
	}
	defer listener.Close()

	for {
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("listener accept err:", err)
			continue
		}
		go this.Handler(conn)
	}

}
